// Have include guard.
#ifndef FPK_ARCADEMODERNDRIVEFILTER_HPP
#define FPK_ARCADEMODERNDRIVEFILTER_HPP

#include "../Filter.hpp"
#include "../../Values/TwoJoystickValue.hpp"
#include "../../Values/CartesianValue.hpp"

/**
 *  The ArcadeModernDriveFilter class is a filter that converts from a TwoJoystickValue to a CartesianValue using arcade modern drive.
 *  
 *  If you've ever played a first person shooter video game, this should make sense to you.
 *  The left joystick is the "move" stick and the right joystick is the "look" stick.
 *  
 *  The left joystick makes the robot go forwards, backwards, and sideways.
 *  The right joystick makes the robot rotate.
 */
class ArcadeModernDriveFilter :
	public Filter<TwoJoystickValue, CartesianValue>
{
	public:
		/**
		 *  Apply the filter to an input.
		 */
		virtual CartesianValue Apply(const TwoJoystickValue &input) const;
};

#endif // #ifndef FPK_ARCADEMODERNDRIVEFILTER_HPP
